package br.com.minhabiblia.view.form.leituraBiblica {
		
	import br.com.minhabiblia.view.componentes.MostraCursor;
	import br.com.minhabiblia.view.entidades.Capitulo;
	import br.com.minhabiblia.view.entidades.Retorno;
	import br.com.minhabiblia.view.entidades.Usuario;
	import br.com.minhabiblia.view.entidades.Verso;
	import br.com.minhabiblia.view.form.salvarFavorito.JanelaSalvarFavorito;
	import br.com.minhabiblia.view.servico.Servico;
	import br.com.minhabiblia.view.util.FormatadorUtil;
	import br.com.minhabiblia.view.util.PoolDados;
	
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	
	import mx.collections.ArrayCollection;
	import mx.events.FlexEvent;
	import mx.events.ListEvent;
	import mx.managers.PopUpManager;
	import mx.rpc.events.InvokeEvent;
	import mx.rpc.events.ResultEvent;
	
	public class LerLivro extends LerLivroView {
		
		private static var pool : PoolDados = PoolDados.getInstancia();
		
		private static var ITEM_OPCIONAL : String = new String("---");
		
		/* ************
		 * Construtores
		 * ************ */
		public function LerLivro():void {
			super();
			addEventListener(FlexEvent.CREATION_COMPLETE, this.init);
		}
		
		/* *******
		 * Eventos
		 * ******* */				
		protected function init(event: FlexEvent):void {
			// preenche campos com valores pre-determinados
			this.preencheComboLivros();
			
			// recupera o usuario da sessao
			Servico.getServico("MinhaBibliaOnLineFachada", retornoObterUsuarioSessao, aguardarRetorno).getOperation("obterUsuarioSessao").send();

			// eventos
			this.cmbLivros.addEventListener(ListEvent.CHANGE, livroEscolhido);
			this.lstCapitulos.addEventListener(ListEvent.CHANGE, capituloEscolhido);
			this.lstVersos.addEventListener(ListEvent.CHANGE, versoEscolhido);
			this.lstLivro.addEventListener(ListEvent.CHANGE, versoLivroEscolhido);
			this.btFavoritar.addEventListener(FlexEvent.BUTTON_DOWN, favoritarVerso);
			
			this.btTwittar.addEventListener(MouseEvent.CLICK, twittar);
			this.btLinkar.addEventListener(MouseEvent.CLICK, linkar);
	    }
	    
  		private function linkar(event: MouseEvent): void {
  			var link : String = FormatadorUtil.criarLinkParaListaVersos(this.lstLivro.selectedItems);
			navigateToURL(new URLRequest(link), 'quote');
		}

  		private function twittar(event: MouseEvent): void {
  			var prefixo: String = "http://twitter.com/home?status=Leia a Biblia: "
  			var link: String = FormatadorUtil.criarLinkParaListaVersos(this.lstLivro.selectedItems);
  			link = link.replace("&", "%26");
  			link = link.replace("&", "%26");
  			var sufixo: String = " %28via @minhabiblia%29"
			navigateToURL(new URLRequest(prefixo + link + sufixo), 'quote');
		}
	    
		private function livroEscolhido(event: ListEvent):void {
			var livro: String = cmbLivros.selectedItem as String;
			if (livro == ITEM_OPCIONAL) {
				this.lstCapitulos.dataProvider = new ArrayCollection();
				this.lstVersos.dataProvider = new ArrayCollection();
				this.lstLivro.dataProvider = new ArrayCollection();
			} else {
				var livroOk: String = FormatadorUtil.getNomeLivroSemAcentuacaoOuEspacos(livro);
				var capitulosLivroSelecionado: ArrayCollection = pool.dados[livroOk];
				if (capitulosLivroSelecionado != null) {
					preencherLstCapitulosLstVersos(capitulosLivroSelecionado);
				} else {
					Servico.getServico("MinhaBibliaOnLineFachada", retornoListarCapitulos, aguardarRetorno).getOperation("listarCapitulos").send(livro);
				}
			}
		}
		
		private function retornoListarCapitulos(event: ResultEvent):void {
			MostraCursor.removeBusyCursor();
			var retorno : Retorno = event.result as Retorno;
			
			var livro: String = cmbLivros.selectedItem as String;
			var livroOk: String = FormatadorUtil.getNomeLivroSemAcentuacaoOuEspacos(livro);
			pool.dados[livroOk] = retorno.lista;
			
			preencherLstCapitulosLstVersos(retorno.lista);
		}
		
		private function preencherLstCapitulosLstVersos(listaCapitulos: ArrayCollection):void {
			this.lstLivro.verticalScrollPosition = 0;
			this.lstCapitulos.dataProvider = listaCapitulos;
			this.lstVersos.dataProvider = new ArrayCollection();
			this.lstLivro.dataProvider = new ArrayCollection();

			for each (var cap : Capitulo in listaCapitulos) {
				this.lstVersos.dataProvider = cap.versos;
				this.lstLivro.dataProvider = cap.versos;
				break;
			}
		}
		
		private function capituloEscolhido(event: ListEvent):void {
			var capitulo: Capitulo = lstCapitulos.selectedItem as Capitulo;
			this.lstLivro.verticalScrollPosition = 0;
			this.lstVersos.dataProvider = capitulo.versos;
			this.lstLivro.dataProvider = capitulo.versos;
		}
		
		private function versoEscolhido(event: ListEvent):void {
			var verso: Verso = lstVersos.selectedItem as Verso;
			this.lstLivro.selectedItem = verso;
			this.lstLivro.verticalScrollPosition = this.lstLivro.selectedIndex;
		}
		
		private function versoLivroEscolhido(event: ListEvent):void {
			var verso:Verso = this.lstLivro.selectedItem as Verso;
			this.lstVersos.selectedItem = verso;
			this.lstCapitulos.selectedItem = verso.capitulo;
		}
		
		private function favoritarVerso(event: FlexEvent):void {
			if (this.lstLivro.selectedItems.length > 0) {
				var pool : PoolDados = PoolDados.getInstancia();
				
				pool.dados.versos = this.lstLivro.selectedItems;
				PopUpManager.createPopUp(this, JanelaSalvarFavorito, true);
			}
		}
		
		private function aguardarRetorno(event: InvokeEvent):void {
			MostraCursor.setBusyCursor("Aguarde...", this);
		}
		
	    private function retornoObterUsuarioSessao(event : ResultEvent): void {
	    	MostraCursor.removeBusyCursor();
	    	pool.dados.usuario = event.result as Usuario;
	    }
		
	    private function preencheComboLivros(): void {
	    	var livros : ArrayCollection = new ArrayCollection();
	    	livros.addItem("---");
			livros.addItem("Gênesis");
			livros.addItem("Êxodo"); 
			livros.addItem("Levítico"); 
			livros.addItem("Números"); 
			livros.addItem("Deuteronômio"); 
			livros.addItem("Josué"); 
			livros.addItem("Juízes"); 
			livros.addItem("Rute"); 
			livros.addItem("I Samuel"); 
			livros.addItem("II Samuel"); 
			livros.addItem("I Reis"); 
			livros.addItem("II Reis"); 
			livros.addItem("I Crônicas"); 
			livros.addItem("II Crônicas"); 
			livros.addItem("Esdras"); 
			livros.addItem("Neemias"); 
			livros.addItem("Ester"); 
			livros.addItem("Jó"); 
			livros.addItem("Salmos"); 
			livros.addItem("Provérbios"); 
			livros.addItem("Eclesiastes"); 
			livros.addItem("Cantares"); 
			livros.addItem("Isaías"); 
			livros.addItem("Jeremias"); 
			livros.addItem("Lamentações"); 
			livros.addItem("Ezequiel"); 
			livros.addItem("Daniel"); 
			livros.addItem("Oséias"); 
			livros.addItem("Joel"); 
			livros.addItem("Amós"); 
			livros.addItem("Obadias"); 
			livros.addItem("Jonas"); 
			livros.addItem("Miquéias"); 
			livros.addItem("Naum"); 
			livros.addItem("Habacuque"); 
			livros.addItem("Sofonias"); 
			livros.addItem("Ageu"); 
			livros.addItem("Zacarias"); 
			livros.addItem("Malaquias");
			livros.addItem("---"); 
			livros.addItem("Mateus"); 
			livros.addItem("Marcos"); 
			livros.addItem("Lucas"); 
			livros.addItem("João"); 
			livros.addItem("Atos"); 
			livros.addItem("Romanos"); 
			livros.addItem("I Coríntios"); 
			livros.addItem("II Coríntios"); 
			livros.addItem("Gálatas"); 
			livros.addItem("Efésios"); 
			livros.addItem("Filipenses"); 
			livros.addItem("Colossenses"); 
			livros.addItem("I Tessalonicenses"); 
			livros.addItem("II Tessalonicenses"); 
			livros.addItem("I Timóteo"); 
			livros.addItem("II Timóteo"); 
			livros.addItem("Tito"); 
			livros.addItem("Filemom"); 
			livros.addItem("Hebreus"); 
			livros.addItem("Tiago"); 
			livros.addItem("I Pedro"); 
			livros.addItem("II Pedro"); 
			livros.addItem("I João"); 
			livros.addItem("II João"); 
			livros.addItem("III João"); 
			livros.addItem("Judas"); 
			livros.addItem("Apocalipse");

			pool.dados.listaLivros = livros;
			this.cmbLivros.dataProvider = pool.dados.listaLivros;		
	    }
	}
}